
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Functors that ignore arguments.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef _USUL_ADAPTERS_IGNORE_H_
#define _USUL_ADAPTERS_IGNORE_H_


namespace Usul {
namespace Adapters {


///////////////////////////////////////////////////////////////////////////////
//
//  A functor that ignores the argument.
//
///////////////////////////////////////////////////////////////////////////////

template < class F > struct Ignore
{
  Ignore ( F f ) : _f ( f ){}
  Ignore ( const Ignore &f ) : _f ( f._f ){}
  template < class Arg > void operator () ( const Arg & )
  {
    _f();
  }
private:
  Ignore &operator = ( const Ignore & );
  F _f;
};


///////////////////////////////////////////////////////////////////////////////
//
//  Make ignore functor.
//
///////////////////////////////////////////////////////////////////////////////

template < class F > inline Ignore < F > ignore ( F f )
{
  return Ignore < F > ( f );
}


} // namespace Adapters
} // namespace Usul


#endif // _USUL_ADAPTERS_IGNORE_H_
